SELECT û instrukcja i FROM û przyk│ad klauzuli

W niekt≤rych z poni┐szych przyk│ad≤w przyjΩto, ┐e w tabeli Pracownicy znajduje siΩ pole Zarobki. Nale┐y zauwa┐yµ, ┐e w tabeli Pracownicy znajduj╣cej siΩ w bazie danych Northwind nie ma takiego pola.

W tym przyk│adzie tworzony jest obiekt Recordset typu zestaw dynamiczny bazuj╣cy na instrukcji SQL, kt≤ry wybiera pola Nazwisko i ImiΩ ze wszystkich rekord≤w tabeli Pracownicy. Wywo│ywana jest procedura WyliczPola drukuj╣ca zawarto£µ obiektu Recordset w oknie.

Sub SelectX1()

    Dim dbs As Database, rst As Recordset

    ' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a

    ' na rzeczywist╣ bazΩ danych Northwind.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Wybierz nazwiska i imiona ze wszystkich

    ' rekord≤w tabeli Pracownicy.

Set rst = dbs.OpenRecordset("SELECT Nazwisko, "

        & "ImiΩ FROM Pracownicy;")

    ' Zape│nij obiekt Recordset.

rst.MoveLast

' Wywo│aj procedurΩ WyliczPola w celu

' wydrukowania zawarto£ci obiektu Recordset.

WyliczPola rst,12

dbs.Close

End Sub

W tym przyk│adzie znajdowana jest liczba rekord≤w zawieraj╣cych warto£µ w polu KodPocztowy, a zwracane pole otrzymuje nazwΩ Licznik.

Sub SelectX2()

    Dim dbs As Database, rst As Recordset

    ' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a

    ' na rzeczywist╣ bazΩ danych Northwind.

    Set dbs = OpenDatabase("Northwind.mdb")

    ' Policz rekordy zawieraj╣ce warto£µ KodPocztowy

    ' i zwr≤µ w polu Licznik znalezion╣ liczbΩ

    ' rekord≤w.

Set rst = dbs.OpenRecordset("SELECT Count " _

        & "(KodPocztowy) AS Licznik FROM Klienci;")

    ' Zape│nij obiekt Recordset.

    rst.MoveLast

    ' Wywo│aj procedurΩ WyliczPola w celu wydrukowania

    ' zawarto£ci obiektu Recordset. ' Okre£l szeroko£µ pola = 12.

    WyliczPola rst, 12

    dbs.Close

End Sub

W tym przyk│adzie zostaje znaleziona i wy£wietlona liczba pracownik≤w oraz ich przeciΩtne i maksymalne wynagrodzenie.

Sub SelectX3()

    Dim dbs As Database, rst As Recordset

    ' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a

    ' na rzeczywist╣ bazΩ danych Northwind.

Set dbs = OpenDatabase("Northwind.mdb")

    ' Policz pracownik≤w, oblicz przeciΩtne

    ' wynagrodzenie i zwr≤µ maksymalne wynagrodzenie.

    Set rst = dbs.OpenRecordset("SELECT Count (*) " _

        & "AS RazemPracownik≤w, Avg(Wynagrodzenie) " _

        & "AS PrzeciΩtneWynagr, Max(Wynagrodzenie) " _

        & "AS MaksymalneWynagr FROM Pracownicy;")

    ' Zape│nij obiekt Recordset.

    rst.MoveLast

    ' Wywo│aj procedurΩ WyliczPola w celu wydrukowania

    ' zawarto£ci obiektu Recordset. Przeka┐ obiekt ' Recordset i

    ' wymagan╣ szeroko£µ pola.

    WyliczPola rst, 17

    dbs.Close

End Sub

Obiekt Recordset jest przekazywany do procedury Sub o nazwie WyliczPola. NastΩpnie procedura ta formatuje i drukuje pola obiektu Recordset w oknie Debug. Zmienna intD│Pola zawiera wymagan╣ szeroko£µ drukowanego pola. Niekt≤re pola mog╣ zostaµ obciΩte.

Sub WyliczPola(rst As Recordset, intD│Pola As Integer)

    Dim lngRekordy As Long, lngPola As Long

    Dim lngLiczRek As Long, lngLiczPol As Long

    Dim strTytu│ As String, strTymcz As String

    ' W zmiennej lngRekordy umie£µ liczbΩ

    ' rekord≤w obiektu Recordset.

    lngRekordy = rst.RecordCount

    ' W zmiennej lngPola umie£µ liczbΩ

    ' p≤l obiektu Recordset.

    lngPola = rst.Fields.Count

    

    Debug.Print "Liczba rekord≤w: " & lngRekordy _

        & " Liczba p≤l w rekordzie: " & lngPola

    Debug.Print

    

' Utw≤rz ci╣g znak≤w s│u┐╣cy do drukowania nag│≤wka 

' kolumny.

    strTytu│ = "Rekord  "

    For lngLiczPol = 0 To lngPola - 1

        strTytu│ = strTytu│ _

        & Left(rst.Fields(lngLiczPol).Name _

        & Space(intD│Pola), intD│Pola)

    Next lngLiczPol

    

    ' Drukuj nag│≤wek kolumny.

    Debug.Print strTytu│

    Debug.Print

    

    ' Przejdƒ w pΩtli przez wszystkie elementy ' obiektu Recordset;

    ' wydrukuj liczbΩ rekord≤w i warto£ci pol.

    rst.MoveFirst

    For lngLiczRek = 0 To lngRecordy - 1

        Debug.Print Right(Space(6) & _

            Str(lngLiczRek), 6) & "  ";

        For lngLiczPol = 0 To lngPola - 1

            ' Sprawdƒ, czy warto£µ jest r≤wna Null.

            If IsNull(rst.Fields(lngLiczPol)) Then

                strTymcz = "<puste>"

            Else

                ' Wpisz w strTymcz zawarto£µ pola.

                Select Case _

                    rst.Fields(lngLiczPol).Type

                    Case 11

                        strTymcz = ""

                    Case dbText, dbMemo

                        strTymcz = _

                            rst.Fields(lngLiczPol)

                    Case Else

                        strTymcz = _

                            str(rst.Fields(lngLiczPol))

                End Select

            End If

            Debug.Print Left(strTymcz _

                & Space(intD│Pola), intD│Pola);

        Next lngLiczPol

        Debug.Print

        rst.MoveNext

    Next lngLiczRek

End Sub